/*
 * @Description: In User Settings Edit
 * @Author: xiaoying
 * @Date: 2019-09-04 16:02:23
 * @LastEditTime: 2019-09-04 16:25:15
 * @LastEditors: mayuanye
 */
import { NativeModules } from 'react-native';
import Theme from './Theme';
let TS = NativeModules.JSThemes;

/**
 * @class Themes
 * @description 专题图集合
 */
export default class Themes {
  /**
   * 创建一个新的Themes对象
   *
   * @memberof Themes
   * @returns {Promise<Themes>}
   */
  async createObj() {
    try {
      var { ThemesId } = await TS.createObj();
      var themes = new Themes();
      themes._MGThemesId = ThemesId;
      return themes;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得专题图个数
   *
   * @memberof Themes
   * @returns {int} 专题图个数
   */
  async getCount() {
    try {
      let count = await TS.getCount(this._MGThemesId);
      return count;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得可见的单值或统计专题图
   *
   * @memberof Themes
   * @returns {Promise<Theme>}
   */
  async getVisibleBaseTheme() {
    try {
      try {
        var { ThemeId } = await TS.getVisibleBaseTheme(this._MGThemesId);
        var theme = null;
        if (ThemeId != null) {
          theme = new Theme();
          theme._MGThemeId = ThemeId;
        }
        return theme;
      } catch (e) {
        console.error(e);
      }
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得可见的专题图
   *
   * @memberof Themes
   * @returns {Promise<Theme>}
   */
  async getVisibleSurfaceTheme() {
    try {
      try {
        var { ThemeId } = await TS.getVisibleSurfaceTheme(this._MGThemesId);
        var theme = null;
        if (ThemeId != null) {
          theme = new Theme();
          theme._MGThemeId = ThemeId;
        }
        return theme;
      } catch (e) {
        console.error(e);
      }
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 向集合中添加专题图
   *
   * @memberof Themes
   * @param {Object} theme 专题图 (Object--Theme)
   * @returns {boolean} true-成功 ；false-失败
   */
  async append(theme) {
    try {
      let result = await TS.append(this._MGThemesId, theme._MGThemeId);
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 移除指定位置处的专题图
   *
   * @memberof Themes
   * @param {int} index 专题图位置
   * @returns {boolean} true-成功 ；false-失败
   */
  async remove(index) {
    try {
      let result = await TS.remove(this._MGThemesId, index);
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 清空集合中所有的专题图
   *
   * @memberof Themes
   * @returns {boolean} true-成功 ；false-失败
   */
  async clear() {
    try {
      let result = await TS.clear(this._MGThemesId);
      return result;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 获得指定位置的专题图
   *
   * @memberof Themes
   * @param {int} index 专题图索引
   * @returns {Promise<Theme>} 成功返回指定位置的专题图
   */
  async getThemeByIndex(index) {
    try {
      var { ThemeId } = await TS.getThemeByIndex(this._MGThemesId, index);
      var theme = null;
      if (ThemeId != null) {
        theme = new Theme();
        theme._MGThemeId = ThemeId;
      }
      return theme;
    } catch (e) {
      console.error(e);
    }
  }

  /**
   * 根据名称和索引获得专题图
   *
   * @memberof Themes
   * @param {String} name 专题图名称
   * @param {int} index 专题图索引
   * @returns {Promise<Theme>} 成功返回指定位置的专题图
   */
  async getThemeByName(name, index) {
    try {
      var { ThemeId } = await TS.getThemeByName(this._MGThemesId, name, index);
      var theme = null;
      if (ThemeId != null) {
        theme = new Theme();
        theme._MGThemeId = ThemeId;
      }
      return theme;
    } catch (e) {
      console.error(e);
    }
  }
}
